﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CityGames
{
    public partial class FormAlquilerVenta3 : Form
    {
        static private FormContenedor contenedor;
        static private Juego juego = new Juego();
        static private Genero genero = new Genero();
        static private Plataforma plataforma = new Plataforma();
        private const int numeroDeJuegosPorPagina = 6;
        private int numeroDePaginaActual;
        private int numeroDePaginaActual2;
        private int numeroDePaginasMaximo;
        private int numeroDePaginasMaximo2;
        private string dni = "";
        static private Alquiler alquiler = new Alquiler();

        static private CopiaFisica copiaFisica = new CopiaFisica();
        static public DataSet dsCopiasFisicas = new DataSet();

        private DataSet dsJuegos;
        private DataSet dsJuegosSeleccionados;
        private DataSet dsJuegosSeleccionadosTotal;
        /*
        public FormAlquilerVenta3(string argDni)
        {
            dni = argDni;
            InitializeComponent();
        }
        */
        public FormAlquilerVenta3()
        {
            InitializeComponent();
        }

        public void Iniciar(string argDni)
        {
            dni = argDni;
            numeroDePaginaActual2 = 1;
            MostrarTodos();
            alquiler.VaciarTabla();
            CargarDataGridViewSeleccion();
        }

        private void FormAlquilerVenta3_Load(object sender, EventArgs e)
        {
            try
            {
                contenedor = (FormContenedor)MdiParent;
                dsJuegos = new DataSet();
                dsJuegosSeleccionados = new DataSet();
                dsJuegosSeleccionadosTotal = new DataSet();

                numeroDePaginaActual = 1;
                numeroDePaginaActual2 = 1;

                cbPlataforma.Items.Add("Todas");
                foreach (DataRow row in plataforma.ObtenerPlataformas().Rows)
                {
                    cbPlataforma.Items.Add(row[0].ToString());
                }
                MostrarTodos();
                alquiler.VaciarTabla();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btFiltrar_Click(object sender, EventArgs e)
        {
            String titulo = tbTitulo.Text;
            String plataforma = cbPlataforma.Text;
            Boolean alquiler = rbAlquiler.Checked;
            Boolean venta = rbNuevas.Checked;

            if ((titulo != "" || plataforma != "") && (alquiler || venta))
            {
                CargarDataGridViewJuegos();
            }
            else
            {
                MessageBox.Show("Rellena algún campo para el filtrado.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btAnyadir_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgLista.SelectedRows.Count == 1)
                {
                    if(rbAlquiler.Checked)
                    {
                        InsertarSegundoGridView(dsJuegos.Tables["CopiasAlquilerPaginadas"].Rows[dgLista.SelectedRows[0].Index]);
                    }
                    else if (rbNuevas.Checked)
                    {
                        InsertarSegundoGridView(dsJuegos.Tables["CopiasNuevasPaginadas"].Rows[dgLista.SelectedRows[0].Index]);
                    }
                    else if (rbSegunda.Checked)
                    {
                        InsertarSegundoGridView(dsJuegos.Tables["CopiasSegundaManoPaginadas"].Rows[dgLista.SelectedRows[0].Index]);
                    }
                    else 
                    {
                        InsertarSegundoGridView(dsJuegos.Tables["CopiasFisicasPaginadas"].Rows[dgLista.SelectedRows[0].Index]);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btQuitar_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgSeleccion.SelectedRows.Count == 1)
                {
                    QuitarSegundoGridView(dsJuegosSeleccionados.Tables["Alquileres"].Rows[dgSeleccion.SelectedRows[0].Index]);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void InsertarSegundoGridView(DataRow datos)
        {
            bool insertado = false;
            try
            {
                alquiler.Codigo = int.Parse(datos["Codigo"].ToString());
                alquiler.NombreJuego = datos["Nombre"].ToString();
                alquiler.PlataformaJuego = datos["Plataforma"].ToString();
                alquiler.Tipo = datos["Tipo"].ToString();
                alquiler.Precio = decimal.Parse(datos["Precio"].ToString());

                //COMPROBAR QUE EL ELEMENTO NO ESTA INSERTADO YA ANTES DE INSERTAR
                if(dgSeleccion.Rows.Count > 0)
                {
                    foreach (DataRow row in dsJuegosSeleccionadosTotal.Tables["AlquileresSinPaginar"].Rows)
                    {
                        //MessageBox.Show(row["Codigo"].ToString(), "error");
                        if (row["Codigo"].ToString() == alquiler.Codigo.ToString())
                        {
                            insertado = true;
                        }
                    }
                }

                if (!insertado)
                    alquiler.InsertarBD(alquiler.Codigo, alquiler.NombreJuego, alquiler.PlataformaJuego, alquiler.Precio, alquiler.Tipo);
                else
                    MessageBox.Show("El juego con codigo "+alquiler.Codigo+" ya está seleccionado","Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                
                CargarDataGridViewSeleccion();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void QuitarSegundoGridView(DataRow datos)
        {
            try
            {
                int codigo = int.Parse(datos["Codigo"].ToString());

                alquiler.QuitarAlquilerBD(codigo);
                CargarDataGridViewSeleccion();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarDataGridViewSeleccion()
        {
            try
            {
                if (numeroDePaginaActual2 == 0)
                    numeroDePaginaActual2 = 1;

                numeroDePaginasMaximo2 = int.Parse(Math.Ceiling(double.Parse(alquiler.NumeroAlquileres().ToString()) / numeroDeJuegosPorPagina).ToString());
                if (numeroDePaginaActual2 > numeroDePaginasMaximo2)
                    numeroDePaginaActual2 = numeroDePaginasMaximo2;

                dsJuegosSeleccionados = alquiler.Alquileres(numeroDeJuegosPorPagina * (numeroDePaginaActual2 - 1), numeroDePaginaActual2 * numeroDeJuegosPorPagina);
                dsJuegosSeleccionadosTotal = alquiler.AlquileresSinPaginar();
                dgSeleccion.DataSource = dsJuegosSeleccionados;
                dgSeleccion.DataMember = "Alquileres";
                lblPaginaDGV2.Text = "Página " + numeroDePaginaActual2.ToString() + " de " + numeroDePaginasMaximo2.ToString();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgSeleccion.SelectedRows.Count > 0)
                {
                    contenedor.hijoFormAlquilerVenta4.Iniciar(dni);
                    contenedor.hijoFormAlquilerVenta4.Focus();
                }
                else
                {
                    MessageBox.Show("Añade al menos un juego a la lista de la compra", "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btVolver_Click(object sender, EventArgs e)
        {
            contenedor.hijoFormAlquilerVenta.MostrarTodos();
            contenedor.hijoFormAlquilerVenta.Focus();
        }

        private void CargarDataGridViewJuegos()
        {
            try
            {
                string plataforma = "";
                if (numeroDePaginaActual == 0)
                    numeroDePaginaActual = 1;

                if (cbPlataforma.Text.ToString() != "Todas")
                    plataforma = cbPlataforma.Text.ToString();
                
                if (rbAlquiler.Checked)
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.NumeroCopiasFisicasParaAlquilar(tbTitulo.Text.ToString(), plataforma).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsJuegos = copiaFisica.CopiasFisicasParaAlquilarPaginadas(tbTitulo.Text.ToString(), plataforma, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgLista.DataSource = dsJuegos; 
                    dgLista.DataMember = "CopiasAlquilerPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                }
                
                else if (rbNuevas.Checked)
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.NumeroCopiasFisicasNuevas(tbTitulo.Text.ToString(), plataforma).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsJuegos = copiaFisica.CopiasFisicasNuevasPaginadas(tbTitulo.Text.ToString(), plataforma, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgLista.DataSource = dsJuegos;
                    dgLista.DataMember = "CopiasNuevasPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                                    
                }

                else if (rbSegunda.Checked)
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.NumeroCopiasFisicasSegundaMano(tbTitulo.Text.ToString(), plataforma).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsJuegos = copiaFisica.CopiasFisicasSegundaManoPaginadas(tbTitulo.Text.ToString(), plataforma, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgLista.DataSource = dsJuegos;
                    dgLista.DataMember = "CopiasSegundaManoPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                }
                
                else
                {
                    numeroDePaginasMaximo = int.Parse(Math.Ceiling(double.Parse(copiaFisica.NumeroCopiasFisicas(tbTitulo.Text.ToString(), plataforma).ToString()) / numeroDeJuegosPorPagina).ToString());
                    if (numeroDePaginaActual > numeroDePaginasMaximo)
                        numeroDePaginaActual = numeroDePaginasMaximo;

                    dsJuegos = copiaFisica.CopiasFisicasPaginadas(tbTitulo.Text.ToString(), plataforma, numeroDeJuegosPorPagina * (numeroDePaginaActual - 1), numeroDePaginaActual * numeroDeJuegosPorPagina);
                    dgLista.DataSource = dsJuegos;
                    dgLista.DataMember = "CopiasFisicasPaginadas";
                    lblPaginaDGV.Text = "Página " + numeroDePaginaActual.ToString() + " de " + numeroDePaginasMaximo.ToString();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btMostrarTodos_Click(object sender, EventArgs e)
        {
            try
            {
                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void MostrarTodos()
        {
            try
            {
                tbTitulo.Text = "";
                tbTitulo.Focus();
                cbPlataforma.SelectedItem = cbPlataforma.Items[0];
                rbTodas.Checked = true;

                numeroDePaginaActual = 1;

                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cbPlataforma_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tbTitulo_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbTodas_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbAlquiler_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbNuevas_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbSegunda_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = numeroDePaginasMaximo;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual < numeroDePaginasMaximo)
                {
                    numeroDePaginaActual++;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual > 1)
                {
                    numeroDePaginaActual--;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGV2UltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual2 = numeroDePaginasMaximo2;
                CargarDataGridViewSeleccion();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGV2PaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual2 < numeroDePaginasMaximo2)
                {
                    numeroDePaginaActual2++;
                    CargarDataGridViewSeleccion();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGV2PaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActual2 > 1)
                {
                    numeroDePaginaActual2--;
                    CargarDataGridViewSeleccion();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGV2PrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActual2 = 1;
                CargarDataGridViewSeleccion();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
